﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace LI4.Presentation
{
    public partial class EditarOperador : Form
    {
        private Business.Operador operador;

        public EditarOperador(Business.Operador oper)
        {
            InitializeComponent();
            tabControl1.Enabled = false;
            removerB.Enabled = false;
            criarB.Enabled = false;
            activarB.Enabled = false;
            if (oper != null) this.operador = oper;
        }

       

        private void procurarB_Click(object sender, EventArgs e)
        {
            string user = userTB.Text;

            Data.Operador operadorData = new LI4.Data.Operador();
            

            if (operadorData.exiteOperador(user))
            {
                operador = new LI4.Business.Operador(operadorData.getOperador(user));

                if (operador.Login.Tipo == Business.Login.SUPERINACTIVO || operador.Login.Tipo == Business.Login.OPERINACTIVO)
                {
                    tabControl1.Enabled = false;
                    activarB.Enabled = true;
                    removerB.Enabled = false;
                    criarB.Enabled = false;
                }
                else
                {
                    activarB.Enabled = false;
                    tabControl1.Enabled = true;
                    removerB.Enabled = true;
                    criarB.Enabled = true;
                }

                nomeTB.Text = operador.Nome;
                emailTB.Text = operador.Mail;
                telefoneTB.Text = operador.Telefone.ToString();
                contribuinteTB.Text = operador.Contribuinte.ToString();
                
                if (operador.Posto == Business.Login.OPERADOR) operadorRB.Checked = true;
                else superiorRB.Checked=true;
                

                int l = 0, d = 0, ll = 0, dd = 0;

                foreach (Business.Distrito dist in Program.distritos)
                {
                    distritoCB.Items.Add(dist);

                    if (dist.Nome.Equals(operador.Localidade.Distrito.Nome)) dd = d;

                    d++;
                }
                distritoCB.SelectedIndex = dd;


                foreach (Business.Localidade local in Program.localidades)
                {
                    if (local.Distrito.Nome.Equals(operador.Localidade.Distrito.Nome))
                    {
                        localidadeCB.Items.Add(local);
                        l++;
                    }
                    if (local.Nome.Equals(operador.Localidade.Nome)) ll = l;
                    
                }
                localidadeCB.SelectedIndex = ll-1;

                moradaTB.Text = operador.Rua;

                cp1TB.Text = operador.CodPostal.Substring(0, 4);
                cp2TB.Text = operador.CodPostal.Substring(3, 3);

                usernameTB.Text = operador.Login.Username;
                passwordTB.Text = operador.Login.Password;
                confirmarTB.Text = operador.Login.Password;
                

            }
            else
            {
                tabControl1.Enabled = false;
                removerB.Enabled = false;
                criarB.Enabled = false;
                activarB.Enabled = false;
                localidadeCB.Items.Clear();
                distritoCB.Items.Clear();
                nomeTB.Text = "";
                emailTB.Text = "";
                telefoneTB.Text = "";
                contribuinteTB.Text = "";
                moradaTB.Text = "";

                cp1TB.Text = "";
                cp2TB.Text = "";

                usernameTB.Text = "";
                passwordTB.Text = "";
                confirmarTB.Text = "";
                
                MessageBox.Show(this, "Operador nao existe!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void criarB_Click(object sender, EventArgs e)
        {
            string nome = nomeTB.Text.Trim();
            string email = emailTB.Text.Trim();
            string distrito = distritoCB.Text.Trim();
            string localidade = localidadeCB.Text.Trim();
            string rua = moradaTB.Text.Trim();
            string cod_postal = cp1TB.Text.Trim();
            cod_postal = String.Concat(cod_postal, cp2TB.Text.Trim());
            string username = usernameTB.Text.Trim();
            string pass = passwordTB.Text.Trim();
            string passConf = confirmarTB.Text.Trim();
            int telefone = 0;
            int contribuinte = 0;
            int posto = 0;
            if (operadorRB.Checked) posto = Business.Login.OPERADOR;
            else posto = Business.Login.OPERADOR;
            

            Business.Localidade local = (Business.Localidade)localidadeCB.SelectedItem;


            try
            {
                telefone = Int32.Parse(telefoneTB.Text.Trim());
            }
            catch
            {
                telefone = 0;
            }

            try
            {
                contribuinte = Int32.Parse(contribuinteTB.Text);
            }
            catch
            {
                contribuinte = 0;
            }


            if (nome.Length < 1) MessageBox.Show(this, "Campo Nome inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (email.Length < 1) MessageBox.Show(this, "Campo Email inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (distrito.Length < 1) MessageBox.Show(this, "Campo Distrito inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (localidade.Length < 1) MessageBox.Show(this, "Campo Localidade inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (rua.Length < 1) MessageBox.Show(this, "Campo Morada inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (cod_postal.Length < 1) MessageBox.Show(this, "Campo Código Postal inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (username.Length < 1) MessageBox.Show(this, "Campo Username inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (pass.Length < 1) MessageBox.Show(this, "Campo Password inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (passConf.Length < 1) MessageBox.Show(this, "Campo Confirmar Password inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (telefone == 0) MessageBox.Show(this, "Campo Telefone inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else if (contribuinte == 0) MessageBox.Show(this, "Campo Contribuinte inválido!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else
            {

                if (!pass.Equals(passConf))
                {
                    MessageBox.Show(this, "Volte a inserir a password!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    passwordTB.Text = "";
                    confirmarTB.Text = "";
                }
                else //finalmente tenta inserir na base de dados
                {
                    Business.Login login = new LI4.Business.Login(username, pass, posto, 0);
                    Business.Operador operador = new Business.Operador(nome, rua, cod_postal, telefone, email, contribuinte, posto, local, login);



                    int success = Business.GerirOperador.update(operador);
                    if (success == Business.Login.BADLOGIN)
                        MessageBox.Show(this, "Username já existente!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    else if (success == Data.Ligacao.DBERROR)
                        MessageBox.Show(this, "Ocorreu um erro na base de dados!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    else
                    {
                        MessageBox.Show(this, "Operador editado com successo!", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        this.Dispose();
                    }
                }
            }

        
        }

        private void EditarOperador_Shown(object sender, EventArgs e)
        {
            userTB.Focus();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult reply = MessageBox.Show(this, "Tem a certeza que deseja inactivar o operador?", "Inactivaçao", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
            if (reply == DialogResult.Yes)
            {
                
                Business.Login login = new LI4.Business.Login(operador.Login);
                if (login.Tipo == Business.Login.OPERADOR) login.Tipo = Business.Login.OPERINACTIVO;
                else login.Tipo = Business.Login.SUPERINACTIVO;
                operador.Login = login;


                int success = Business.GerirOperador.remover(operador);
                if (success == Data.Ligacao.DBERROR)
                {
                    MessageBox.Show(this, "Erro na base de dados!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                else
                {
                    MessageBox.Show(this, "Operador inactivado com sucesso!", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.Dispose();
                }
            }
        }

        private void activarB_Click(object sender, EventArgs e)
        {
            DialogResult reply = MessageBox.Show(this, "Tem a certeza que deseja inactivar o operador?", "Inactivaçao", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
            if (reply == DialogResult.Yes)
            {

                Business.Login login = new LI4.Business.Login(operador.Login);
                if (login.Tipo == Business.Login.OPERINACTIVO) login.Tipo = Business.Login.OPERADOR;
                else login.Tipo = Business.Login.SUPERIOR;
                operador.Login = login;


                int success = Business.GerirOperador.remover(operador);
                if (success == Data.Ligacao.DBERROR)
                {
                    MessageBox.Show(this, "Erro na base de dados!", "Erro.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                else
                {
                    MessageBox.Show(this, "Operador Activado com sucesso!", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.Dispose();
                }
            }
        }

        private void EditarOperador_Load(object sender, EventArgs e)
        {
            if(operador!=null){
            if (operador.Login.Tipo == Business.Login.SUPERINACTIVO || operador.Login.Tipo == Business.Login.OPERINACTIVO)
                {
                    tabControl1.Enabled = false;
                    activarB.Enabled = true;
                    removerB.Enabled = false;
                    criarB.Enabled = false;
                }
                else
                {
                    activarB.Enabled = false;
                    tabControl1.Enabled = true;
                    removerB.Enabled = true;
                    criarB.Enabled = true;
                }

                nomeTB.Text = operador.Nome;
                emailTB.Text = operador.Mail;
                telefoneTB.Text = operador.Telefone.ToString();
                contribuinteTB.Text = operador.Contribuinte.ToString();
                
                if (operador.Posto == Business.Login.OPERADOR) operadorRB.Checked = true;
                else superiorRB.Checked=true;
                

                int l = 0, d = 0, ll = 0, dd = 0;

                foreach (Business.Distrito dist in Program.distritos)
                {
                    distritoCB.Items.Add(dist);

                    if (dist.Nome.Equals(operador.Localidade.Distrito.Nome)) dd = d;

                    d++;
                }
                distritoCB.SelectedIndex = dd;


                foreach (Business.Localidade local in Program.localidades)
                {
                    if (local.Distrito.Nome.Equals(operador.Localidade.Distrito.Nome))
                    {
                        localidadeCB.Items.Add(local);
                        l++;
                    }
                    if (local.Nome.Equals(operador.Localidade.Nome)) ll = l;
                    
                }
                localidadeCB.SelectedIndex = ll-1;

                moradaTB.Text = operador.Rua;

                cp1TB.Text = operador.CodPostal.Substring(0, 4);
                cp2TB.Text = operador.CodPostal.Substring(3, 3);

                usernameTB.Text = operador.Login.Username;
                passwordTB.Text = operador.Login.Password;
                confirmarTB.Text = operador.Login.Password;
               
            }
                   
        }
    }
}
